package com.enba.boot.sign.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHAUtil {
  /**
   * 计算字符串的 SHA 签名
   *
   * @param input 要签名的数据
   * @param algorithm 哈希算法（如 "SHA-256"）
   * @return 签名的十六进制字符串
   * @throws NoSuchAlgorithmException 如果算法不支持
   */
  public static String encrypt(String input, String algorithm) throws NoSuchAlgorithmException {
    // 获取 MessageDigest 实例
    MessageDigest digest = MessageDigest.getInstance(algorithm);

    // 将输入字符串转换为字节数组
    byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);

    // 计算哈希值
    byte[] hashBytes = digest.digest(inputBytes);

    // 将字节数组转换为十六进制字符串
    return bytesToHex(hashBytes);
  }

  /**
   * 将字节数组转换为十六进制字符串
   *
   * @param bytes 字节数组
   * @return 十六进制字符串
   */
  private static String bytesToHex(byte[] bytes) {
    StringBuilder hexString = new StringBuilder();
    for (byte b : bytes) {
      String hex = Integer.toHexString(0xff & b);
      if (hex.length() == 1) {
        hexString.append('0');
      }
      hexString.append(hex);
    }
    return hexString.toString();
  }
}
